iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Modern Web

後端菜雞仔想學 Laravel系列 第 19

關鍵字搜尋:建立一個簡單的篩選查詢器吧!

  • 分享至 

  • xImage
  •  

關鍵字搜尋

我們昨天已經做過了分頁設定,那麼今天就來試試建立關鍵字搜尋。

情境想像

線上產品瀏覽系統裡除了甜點,還會有茶品類,品項可能會有好幾種,產品敘述也各不相同,可以再自己設定其他類別的產品。

範例需求

  • 如果我今天希望在線上產品瀏覽系統裡,搜尋所有好喝的紅茶讓我挑選,所以需要將「好喝的紅茶」所有相關產品都列出!
  • 關鍵字查詢為:「產品名稱含有:紅茶」、「產品敘述含有:好喝」
  • 每頁僅列出 10 筆資料。

關鍵字搜尋邏輯

  1. 先取得查詢的關鍵字
  2. 決定僅從產品名稱、產品描述這兩個欄位固定查詢
  3. 建立一個篩選查詢器
  4. 分別查詢產品名稱、產品描述這兩個欄位並篩選出符合的產品
  5. 固定每頁僅列出 10 筆資料
  6. 將篩選結果回傳

修改ProductController.php

public function index(Request $request)
{
    // 取得來自查詢參數的關鍵字
    $keyword = $request->query('keyword');
    $description = $request->query('description');

    // 建立查詢,篩選符合關鍵字的商品
    $query = Product::query();

    // 若有提供產品名稱關鍵字,則篩選商品名稱包含該關鍵字的產品
    if ($keyword) {
        $query->where('product_name', 'like', '%' . $keyword . '%');
    }

    // 若有提供產品描述的關鍵字,則篩選商品描述包含該關鍵字的產品
    if ($description) {
        $query->where('product_description', 'like', '%' . $description . '%');
    }

    // 固定每頁顯示 10 筆資料
    $products = $query->paginate(10);

    // 回傳篩選的結果
    return response()->json($products);
}

query():建立查詢

query() 是 Laravel 中用來建立一個「查詢器物件」的功能,讓你可以依照需求加入篩選條件去設計 SQL 查詢。

我的理解

query() 就像是在餐廳裡準備點餐的時候,先拿起「菜單」。
雖然你還沒選擇餐點,但你已經準備好了要開始挑選。

例如:

Product::query() 

就是告訴系統:「我要開始從 Product 這個資料表裡查資料,請準備好!」

$query = Product::query(); // 建立查詢

則是告訴系統:「我打算從 Product 資料表查詢資料,但具體要查什麼還沒決定,後面會再一步步加上篩選條件。」

where + like:篩選資料

where() 是用來加入篩選條件的,只有符合條件的資料才會被查詢出來。
而 like 是 SQL 中的運算符,適合用來做部分匹配搜尋,例如想找到名稱裡包含某個字的資料。

我的理解

where() 就像是在菜單上挑選特定類型的餐點。

  • 假設你只想吃「辣的」或「不含奶製品」的餐點,like 則是幫助你進行模糊查詢。
  • 假設你想找餐點名稱裡有「紅茶」這兩個字的餐點,但不確定它是不是叫「奶茶紅茶」或「蜂蜜紅茶」,如果使用 'like', '%紅茶%' 只要名字裡有「紅茶」,系統就會找到。

更多相關資訊可以參考以下文章:


上一篇
paginate:將很多細節做得好好的小助理
下一篇
orWhere、orderBy:關鍵字搜尋邏輯更新、加入排序機制!
系列文
後端菜雞仔想學 Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言